查看原文
其他

【动画】如何用scrapy命令行访问、解析网页数据

大邓 大邓和他的Python 2019-04-26

本文写作目的是为了让初学者了解scrapy命令行如何:

  1. 创建项目

  2. 创建爬虫

  3. 数据定位(设计parse函数)

  4. 试运行parse函数。

安装scrapy

  1. pip3 install scrapy

创建scrapy项目

安装好scrapy库之后,我们就可以命令行中创建项目。我一般喜欢先将命令行工作目录切换到desktop,之后才创建项目。创建项目的语法

  1. scrapy startproject <scrapy项目名>

请求方法

平常的话,我们在scrapy项目的命令行中这样访问一个网址

  1. scrapy shell <待抓取的网址>

但是有很多网站会封锁我们的爬虫请求,这时候我们需要设置 -s USER_AGENT 参数。

  1. scrapy shell -s USER_AGENT="浏览器的user_agent" <待抓取的网址>

经过访问后,我们就可以使用response来调用得到的响应数据。

请求实例

比如我们在这里直接访问 简书 https://www.jianshu.com/

我们发现用最简单的方式去访问得到的响应状态码是403,说明爬虫被封了。所以我们需要设置user-agent,伪装成浏览器。

经过伪装后的请求得到200状态码,说明访问正常。

解析响应数据

上面请求很顺利,大家不要被大量的日志吓到。接下来我们就需要解析网页数据。不过解析前我们需要在scrapy项目中先创建爬虫脚本。我们需要先切换到learn_scrapy这个文件夹内,再创建爬虫脚本。语法

  1. scrapy genspider <爬虫名> <域名>

设计爬虫-定位数据

刚刚我们已经成功访问并得到简书的响应response,现在我们想获取简书页面的中的标题。

F12键打开开发者工具,之后定位到这个标题后右键选中Copy,点击 Copy xpath即可获得该标题对应的xpath表达式。之后jianshu.py中的parse函数中撰写数据定位代码。对xpath语法不熟悉的童鞋可点击本文学习 scrapy中Xpath表达式总结

  1. response.xpath('从开发者工具中复制到的xpath表达式').extract()

现在只是设计出解析标题所在标签的xpath表达式,但是是否奏效还未可知。因此接下来我们需要命令行测试定义的parse()函数。这里我们用到

  1. scrapy parse <待爬网址>

不过刚刚在前面我们已经知道简书会封锁我们的爬虫,因此在这里我们还需要设置USER_AGETN参数。因此命令行的命令为

  1. scrapy parse <待爬网址> -s USER_AGENT=<浏览器的user_agent>

刚刚的定位还有点粗糙,现在我们再精确到标题,输出当前页面的所有标题。从下图得知,标题位于 li>div>a中的文本中

现在我们更改代码中的xpath表达式,并运行代码

好了,现在我们已经可以正确的定位到数据。

总结

为了让学习变得可观生动直接,本文全程制作了gif动画,但这也使得讲解的粒度太细,导致内容篇幅太长,不利于学习。所以本文只用容易被封锁的简书网作为案例,教初学者如何使用scrapy命令行创建项目、创建爬虫、数据定位、试运行parse函数。未来还会以gif动画的形式去讲解爬虫,讲解scrapy,希望大家多多支持^_^。觉得gif动图好的童鞋们,记得给我好看啊。

往期文章

Python系列课(爬虫、文本分析、机器学习)视频教程

职场达人必备技能:群发营销内容  

100G 文本分析语料资源(免费下载) 

十分钟带你入门最python风格的Gui库

字符串格式化你不得不知的那些事儿 

python世界中形影不离的一对情侣

将excel中某一列拆分为多个列

手把手教你学会LDA话题模型可视化pyLDAvis库

【工具篇】如何用Google Colab高效的学习Python

爬虫实战:抓取知乎问题“大学生如何赚到一万元”

小demo:对德文数据进行文本分析   

使用Python制作WORD报告 

使用Pandas、Jinja和WeasyPrint制作pdf报告  

如何让python代码显示进度信息?   

文件腾转挪移操作,那都不是事儿


我就希望你给我一个好看




    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存